/* statinfo.c - 演示如何使用 stat() 获取文件信息  
 *              - 某些成员仅为数字...  
 */  

#include <stdio.h>  
#include <sys/types.h>  
#include <sys/stat.h>  
#include <unistd.h> // 为了使用标准类型和函数  

// 显示文件的 stat 信息  
void show_stat_info(const char *fname, const struct stat *buf);  

int main(int argc, char *argv[])  
{  
    if (argc < 2) {  
        fprintf(stderr, "用法: %s <文件路径>\n", argv[0]);  
        return 1;  
    }  

    struct stat info; // 用于存储文件信息的缓冲区  

    // 获取文件状态信息  
    if (stat(argv[1], &info) != -1) {  
        show_stat_info(argv[1], &info);  
        return 0;  
    } else {  
        perror(argv[1]); // 报告 stat() 错误  
        return 1;  
    }  
}  

/*  
 * 显示 stat 结构中的部分信息，以 name=value 格式  
 */  
void show_stat_info(const char *fname, const struct stat *buf)  
{  
    printf("   mode: %o\n", buf->st_mode);          // 文件类型和权限  
    printf("  links: %lu\n", (unsigned long)buf->st_nlink); // 硬链接数量  
    printf("   user: %u\n", buf->st_uid);           // 用户ID  
    printf("  group: %u\n", buf->st_gid);           // 组ID  
    printf("   size: %lld 字节\n", (long long)buf->st_size); // 文件大小  
    printf("modtime: %lld\n", (long long)buf->st_mtime);    // 最后修改时间（时间戳）  
    printf("   name: %s\n", fname);                 // 文件名  
}
